const { cartFormatError } = require("../constant/error.type")
const { createOrUpdate, getAll, update, deleteBatch, selectAllCart } = require("../service/carts.service")

class CartsController {
  /**添加商品到购物车 */
  async add (ctx) {
    // 1.获取goods_id,user_id
    const user_id = ctx.state.user.id
    const { goods_id } = ctx.request.body
    // 2.操作数据库
    const res = await createOrUpdate(user_id, goods_id)
    // 3.返回结果
    ctx.body = {
      code: 0,
      message: '添加到购物车成功',
      result: res
    }
  }
  /**获取购物车列表 */
  async getAllCarts (ctx) {
    // 1.获取分页请求参数
    const { pageNum = 1, pageSize = 10 } = ctx.request.query
    // 2.获取用户id
    const id = ctx.state.user.id
    // 3.操作数据库
    const res = await getAll(pageNum, pageSize, id)
    // 4.返回结果
    ctx.body = {
      code: 0,
      message: '获取购物车列表成功',
      result: res
    }
  }
  /**更新购物车列表 */
  async updateCartsById (ctx) {
    // 1.获取请求参数
    const { id } = ctx.request.params
    const { number, selected } = ctx.request.body
    if (number == undefined && selected == undefined) {
      cartFormatError.message = 'number和selected不能同时为空'
      return ctx.app.emit('error', cartFormatError, ctx)
    }
    // 2.操作数据库
    const res = await update({ id, number, selected })
    // 3.返回结果
    ctx.body = {
      code: 0,
      message: '更新购物车列表成功',
      result: res
    }
  }
  /**批量删除购物车列表 */
  async removeBatchCartsByIds (ctx) {
    // 1.获取请求参数
    const { ids } = ctx.request.body
    // 2.操作数据库
    const res = await deleteBatch(ids)
    // 3.返回结果
    ctx.body = {
      code: 0,
      message: '批量删除购物车列表成功',
      result: res
    }
  }
  async selectAll (ctx) {
    // 1.获取请求参数
    const user_id = ctx.state.user.id
    const { flag } = ctx.request.body
    // 2.操作数据库
    const res = await selectAllCart(user_id, flag)
    // 3.返回结果
    ctx.body = {
      code: 0,
      message: flag ? '全部选中' : '全部不选中',
      result: res
    }
  }
}
module.exports = new CartsController()